Release 1229.0.0 - #10080
Merged
Merged
Conversation
adonesky1
marked this pull request as ready for review
September 2, 2026 20:25
adonesky1
temporarily deployed
to
default-branch
September 2, 2026 20:31 — with
GitHub Actions
Inactive
adonesky1
temporarily deployed
to
default-branch
September 2, 2026 20:31 — with
GitHub Actions
Inactive
|
✅ No changelog changes needed. |
pull Bot
pushed a commit
to Reality2byte/metamask-extension
that referenced
this pull request
Sep 4, 2026
…etaMask#45982) ## **Description** Bump `@metamask/phishing-controller` to `^17.4.1` and `@metamask/transaction-controller` to `^69.8.0` so the extension picks up the address-poisoning known-set fix from [MetaMask/core#9943](MetaMask/core#9943), published in [MetaMask/core#10080](MetaMask/core#10080). ### Summary Ship the controller-side known-recipient cleanup that complements the confirmation-side gate already merged in [MetaMask#45724](MetaMask#45724). ### Problem `PhishingController` was still hydrating known recipients via `getEffectiveRecipient`, so confirmed approves and other non-sends could put token/protocol addresses into the comparison set and cause false-positive lookalike warnings. ### Solution - Bump `@metamask/phishing-controller` `^17.4.0` → `^17.4.1` (known set uses `getSendRecipients`) - Bump `@metamask/transaction-controller` `^69.5.1` → `^69.8.0` (exports `getSendRecipients`; required by phishing-controller 17.4.1) - Bump `@metamask/utils` `^11.11.0` → `^11.12.1` to consume the published ESM fix from [MetaMask/utils#309](MetaMask/utils#309) - Import `getSendRecipients` from `@metamask/transaction-controller` and delete the temporary local copy / tests introduced in MetaMask#45724 - Deduplicate compatible 17.4.x, 69.x, and utils 11.x ranges to a single copy each `transaction-controller@69.8.0` depends on `@metamask/utils@^11.12.0`, so it resolves directly to the fixed 11.12.1 patch release. The temporary Yarn patch is no longer needed. The LavaMoat grant allowing `@metamask/utils` to import `@metamask/scure-bip39` remains necessary because utils 11.12 added that dependency. Without it, the background cannot start (`Policy does not allow importing @metamask/scure-bip39 from @metamask/utils`) and E2E times out on `.controller-loaded`. No breaking API adaptations required. ### Risk Low. Additive/non-breaking package bumps plus swapping a local helper for the published export. The confirmation gate from MetaMask#45724 already avoids scanning non-send candidates; this bump cleans the in-memory known set on controller construction. Utils 11.12.1 is a patch release that corrects ESM module interop without changing mnemonic behavior. ## **Changelog** CHANGELOG entry: Fixed address-poisoning detection so confirmed token approves and other non-send transactions no longer seed lookalike comparisons against token or protocol contract addresses. ## **Related issues** Fixes: - Consumes [MetaMask/core#9943](MetaMask/core#9943) - Released in [MetaMask/core#10080](MetaMask/core#10080) - ESM compatibility fix: [MetaMask/utils#309](MetaMask/utils#309) - Follow-up to [MetaMask#45724](MetaMask#45724) - Ticket: [PSAFE-633](https://consensyssoftware.atlassian.net/browse/PSAFE-633) ## **Manual testing steps** 1. Pull this branch, run `yarn install`, and start a development build. 2. On Base, submit and confirm an `approve(Permit2, 0)` against a vanity token contract (for example Base Uncle). Wait until Activity shows confirmed. 3. Submit a native send to a lookalike of that token contract address (same first 4 / last 4 hex characters). Cancel rather than confirming. 4. Confirm no address-poisoning warning appears. On a build pinned to `phishing-controller@17.4.0`, that send warns because the approve seeded the token contract into the known set. 5. Confirm a real native send to a new address, then submit a lookalike of that payee and cancel it. Confirm the address-poisoning warning still appears for a real prior send payee. ## **Screenshots/Recordings** See verification artifacts on [MetaMask/core#9943](MetaMask/core#9943) and [MetaMask#45724](MetaMask#45724). ### **Before** Confirmed approve could seed a token contract into the phishing known set, so a later send to a lookalike of that contract warned. ### **After** Confirmed approve does not seed the known set; lookalike send against the token contract does not warn. Real prior send payees still trigger the warning. ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. [PSAFE-633]: https://consensyssoftware.atlassian.net/browse/PSAFE-633?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Non-breaking dependency bumps and a straight swap from a duplicated helper to the published export; behavior change is limited to phishing known-set population for address-poisoning detection. > > **Overview** > Upgrades **`@metamask/phishing-controller`** to `^17.4.1`, **`@metamask/transaction-controller`** to `^69.8.0`, and **`@metamask/utils`** to `^11.12.1` so address-poisoning known-recipient hydration uses **`getSendRecipients`** instead of treating token/protocol addresses from approves and other non-sends as prior payees. > > The confirmation hook **`useAddressPoisoningAlert`** now imports **`getSendRecipients`** from `@metamask/transaction-controller`; the temporary local **`getSendRecipients`** implementation and its unit tests are removed, with the alert test mocking the package export. > > Sentry masks and the E2E state-log fixture add **`batchTransactionCounts`** for the transaction controllers introduced in the bumped **`transaction-controller`** version. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 4ef3cd6. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explanation
Summary
Publish
@metamask/phishing-controller17.4.1 and@metamask/transaction-controller69.8.0 so clients can pick up the address-poisoning known-set fix from #9943.Problem
Phishing known recipients were hydrated via
getEffectiveRecipient, which falls back totxParams.tofor non-transfers. Confirmed approves and contract interactions therefore seeded token and protocol addresses into the comparison set, and vanity factories could 4+4-match each other (false positives on Permit2 approves).Solution
@metamask/transaction-controller@69.8.0(minor): exportgetSendRecipientsfor user-chosen send payees only@metamask/phishing-controller@17.4.1(patch): hydrate known recipients fromgetSendRecipientsinstead ofgetEffectiveRecipient, plus the pending C2 blocklist Set optimization and transaction-controller range bump to^69.8.0Workspace dependents bump their
@metamask/phishing-controller/@metamask/transaction-controllerranges but are not published in this release.Risk
No breaking API changes. Known-set membership narrows to real send payees (correct for poisoning). Clients still on older phishing-controller keep the old set until they bump.
Intentionally skipped
@metamask/address-book-controller,@metamask/base-controller,@metamask/controller-utils,@metamask/messenger,@metamask/accounts-controller,@metamask/approval-controller,@metamask/core-backend,@metamask/gas-fee-controller,@metamask/network-controller,@metamask/remote-feature-flag-controller, and@metamask/eth-block-trackerhave unrelated unreleased changes and are not required for #9943.@metamask/phishing-controller@17.4.1Changed
ArraytoSet(#6388)@metamask/transaction-controllerfrom^69.5.2to^69.8.0Fixed
@metamask/transaction-controller@69.8.0Added
getSendRecipients(#9943)Changed
@metamask/utilsfrom^11.11.0to^11.12.0(#10076)References
Checklist
Note
Low Risk
Release packaging and dependency alignment; behavioral fixes ship via already-reviewed controller versions with no additional logic in this PR.
Overview
Cuts monorepo release 1229.0.0 and publishes
@metamask/phishing-controller@17.4.1and@metamask/transaction-controller@69.8.0, with version/changelog/yarn.lockupdates only (no new application source in this diff).@metamask/transaction-controller@69.8.0documents export ofgetSendRecipientsso callers can resolve user-chosen send payees (simple sends, decoded transfers, swap-and-send, batch sends) without treatingtxParams.toas the payee.@metamask/phishing-controller@17.4.1documents switching address-poisoning “known recipient” hydration togetSendRecipientsinstead ofgetEffectiveRecipient, plus C2 blocklist storage moved fromArraytoSetfor O(1) lookups.Workspace packages that depend on phishing or transaction-controller bump to
^17.4.1/^69.8.0(e.g.assets-controller, bridge, wallet); those packages are not newly published here—only the two security-related controllers and the root monorepo version.Reviewed by Cursor Bugbot for commit 265147e. Bugbot is set up for automated code reviews on this repo. Configure here.